package com.xiaolin.structure.queue.array.doubleend;

/**
 * @ClassName DemoQueueTest
 * @Description 描述
 * @Detail detail
 * @Author MyPC
 * @Date 2020/12/12
 * @Version 1.0
 */
public class DemoQueueTest {
    public static void main(String[] args) {
        DemoQueue<Person> demoQueue=new DemoQueue<>(4);
        // 在队尾添加元素
        demoQueue.addLast(new Person(1));  // 此时front==-1,rear==0
        demoQueue.addLast(new Person(2));  // 此时front==-1,rear==1
        demoQueue.addLast(new Person(3));  // 此时front==-1,rear==2
        // 在队头添加元素
        demoQueue.addFirst(new Person(4));  // 此时front==2,rear==2
        // 在队头移除元素
        Person p1 = demoQueue.removeFirst();  // 此时front==-1,rear==2
        System.out.println(p1.age);
        System.out.println(demoQueue.getFront().age);
        System.out.println(demoQueue.getRear().age);
        // 在队尾移除元素
        Person p2 = demoQueue.removeLast();  // 此时front==-1,rear==1
        System.out.println(p2.age);
        Person p3 = demoQueue.removeLast(); // 此时front==-1,rear==0
        System.out.println(p3.age);
        System.out.println(demoQueue.getFront().age);
        System.out.println(demoQueue.getRear().age);
        System.out.println(demoQueue.size());
        Person person = demoQueue.removeFirst(); // 此时front==0,rear==0
        System.out.println(person.age);
        System.out.println(demoQueue.size());
        demoQueue.addLast(new Person(5)); // 此时front==0,rear==1
        demoQueue.addLast(new Person(6)); // 此时front==0,rear==2
        demoQueue.addLast(new Person(7)); // 此时front==0,rear==3
        demoQueue.addLast(new Person(8)); // 此时front==0,rear==0
        demoQueue.removeLast(); // 此时front==0,rear==3
        demoQueue.removeFirst();  // 此时front==1,rear==0
        demoQueue.removeFirst(); // 此时front==2,rear==0
        demoQueue.addLast(new Person(9)); // 此时front==0,rear==0
        demoQueue.removeLast();
    }
    /**
     * @ClassName Person
     * @Description TODO
     * @Detail detail
     * @Author MyPC
     * @Date 2020/11/7
     * @Version 1.0
     */
    public static class Person {
        private int age;
        public Person(int age){
            this.age=age;
        }

        public int getAge() {
            return age;
        }
    }

}
